package com.twb.auth.common;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.twb.core.base.entity.BaseLoginUser;
import com.twb.core.config.TwbConfigProperties;
import com.twb.core.security.TwbSecurityUtil;

/**
 * @ClassName LoginUserUtil 
 * @Description 登录用户工具类 
 * @author DSY
 * @date 2020年7月29日 下午4:03:22
 */
@Component
public class LoginUserUtil {

	@Autowired
	HttpServletRequest request;

	@Autowired
	protected TwbSecurityUtil twbSecurityUtil;
	
	@Autowired
	protected TwbConfigProperties twbConfigProperties;
	
	
	private static LoginUserUtil factory;

	@PostConstruct
	public void init() {
		factory = this;
	}
	
	/**
	 * @Title getBaseLoginUser
	 * @Description 获取登录用户
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午3:48:41
	 */
	public static BaseLoginUser getBaseLoginUser() {
		return factory.twbSecurityUtil.getLoginUser(factory.request);
	}
	
	/**
	 * @Title getTwbLoginUser
	 * @Description 获取登录用户
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:00:16
	 */
	public static TwbLoginUser getTwbLoginUser() {
		TwbLoginUser twbLoginUser = factory.twbSecurityUtil.getLoginUser(factory.request);
		
		return twbLoginUser;
	}

	/**
	 * @Title isDeveloper
	 * @Description 验证是否为开发者
	 * 				等级：最高
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:01:59
	 */
	public static boolean isDeveloper() {
		BaseLoginUser loginUser = getBaseLoginUser();
		
		if (loginUser == null) {
			return false;
		}
		
		if (StringUtils.isBlank(factory.twbConfigProperties.getDeveloperName())) {
			return false;
		}
		
		if (factory.twbConfigProperties.getDeveloperName().equals(loginUser.getLoginName())) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isSuperAdminUser
	 * @Description 用户类型 - 超级管理员
	 * 				等级：一级
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:04:34
	 */
	public static boolean isSuperAdminUser() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		
		if ("0".equals(twbLoginUser.getUserType())) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isSysAdminUser
	 * @Description 用户类型 - 系统管理员
	 * 				等级：二级
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:22:03
	 */
	public static boolean isSysAdminUser() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		
		if ("1".equals(twbLoginUser.getUserType())) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isAdminUser
	 * @Description 用户类型 - 管理员
	 * 				等级：三级
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:22:38
	 */
	public static boolean isAdminUser() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		
		if ("2".equals(twbLoginUser.getUserType())) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isUser
	 * @Description 用户类型 - 普通用户
	 * 				等级：四级
	 * @return
	 * @author DSY
	 * @date 2020年7月29日 下午4:23:19
	 */
	public static boolean isUser() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		
		if ("3".equals(twbLoginUser.getUserType())) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isSuperAdminOrUp
	 * @Description 超级管理员及以上
	 * @return
	 * @author DSY
	 * @date 2021年8月10日 上午12:20:43
	 */
	public static boolean isSuperAdminOrUp() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		if(twbLoginUser.isDeveloper()) {
			return true;
		}
		if ("0".equals(twbLoginUser.getUserType())) {
			return true;
		}
		
		return false;
	}
	/**
	 * @Title isSysAdminOrUp
	 * @Description 系统管理员及以上
	 * @return
	 * @author DSY
	 * @date 2021年8月10日 上午12:17:37
	 */
	public static boolean isSysAdminOrUp() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		if(twbLoginUser.isDeveloper()) {
			return true;
		}
		if ("0,1".indexOf(twbLoginUser.getUserType())>-1) {
			return true;
		}
		
		return false;
	}
	
	/**
	 * @Title isAdminOrUp
	 * @Description 管理员及以上
	 * @return
	 * @author DSY
	 * @date 2021年8月10日 上午12:17:05
	 */
	public static boolean isAdminOrUp() {
		TwbLoginUser twbLoginUser = getTwbLoginUser();
		
		if (twbLoginUser == null) {
			
			return false;
		}
		if(twbLoginUser.isDeveloper()) {
			return true;
		}
		if ("0,1,2".indexOf(twbLoginUser.getUserType())>-1) {
			return true;
		}
		
		return false;
	}
}
